// eslint-disable-next-line import/namespace
import { Message } from 'element-ui'
import { Context } from '@nuxt/types'
import { EErrorCode } from '@/api/errorCode'
export default function ({ $axios }: Context) {
  // 基本配置
  // const IS_DEV = process.env.NODE_ENV !== 'production'
  // $axios.defaults.baseURL = IS_DEV ? 'http://172.16.32.79:9527' : 'http://api.brandhuang.com/frontend'
  $axios.defaults.timeout = 60000
  $axios.setHeader('Content-Type', 'application/json', ['post', 'put', 'get'])

  /**
   * 描述 请求拦截
   * @date 2022-03-31
   * @param {any} (config
   * @returns {any}
   */
  $axios.onRequest((config) => {
    // 这里需要设置 token
    // 加密请求的参数等

    // if (!config.headers.token) {
    //   config.headers.Authorization = 'Bearer ' + state.token
    // } else {
    //   delete config.headers.Authorization
    // }

    // 然后处理 config.data
    // handle(config)

    return config
  })

  /**
   * 描述 响应拦截
   * @date 2022-03-31
   * @param {any} (res)
   * @returns {any}
   */
  $axios.onResponse((res) => {
    console.log('dsdsdsdd===>', res)
    return res.data
    // 这里可以做一些状态的判断，比如请求失败，token 过期刷新，
    // return res
  })

  /**
   * 描述 错误拦截
   * @date 2022-03-31
   * @param {any} (err:any）
   * @returns {any}
   */
  $axios.onError((err: any) => {
    // 做一些错误处理
    const code = parseInt(err.response && err.response.status)
    switch (code) {
      case EErrorCode.REQUEST_ERROR:
        Message.error('请求错误')
        break
      case EErrorCode.TOKEN_EXPIRED:
        Message.error('Token过期，请重新登录')
        break
      case EErrorCode.ACCESS_DENY:
        Message.error('拒绝访问')
        break
      case EErrorCode.NOT_FOUND:
        Message.error(`请求地址出错: ${err.response.config.url}`)
        break
      case EErrorCode.SERVER_INTER_ERROR:
        Message.error('服务器内部错误')
        break
      case EErrorCode.SERVICE_NOT_IMPLEMENT:
        Message.error('服务未实现')
        break
      case EErrorCode.GATEWAY_ERROR:
        Message.error('网关错误')
        break
      case EErrorCode.SERVICE_UNAVAILABLE:
        Message.error('服务不可用')
        break
      case EErrorCode.GATEWAY_TIMEOUT:
        Message.error('网关超时')
        break
      case EErrorCode.HTTP_NOT_SUPPORT:
        Message.error('HTTP版本不受支持')
        break
      default:
        break
    }
  })
}
